package com.fangda.network;

import java.io.Serializable;

/**
 * 网络组件-核心
 * 定义了一个网络组件
 * @author 赵方方
 */
public interface Network extends Serializable {

    /**
     * 组件的唯一ID，可用于查询
     * @return
     */
    String getId();

    /**
     * 网络组件类型
     * @return
     */
    NetworkType getNetworkType();

    /**
     * 是否存活
     * @return
     */
    boolean isAlive();

    /**
     * 获取配置参数
     * @return
     */
    NetworkConfig getConfig();


    /**
     * 关闭连接
     * @return
     */
    void shutdown();

    /**
     * 重启连接
     * @return
     */
    void reload();

    /**
     * 获取完整地址
     * @return
     */
    String getUrl();

    /**
     * 发送消息
     * @param message 消息体
     * @param messageCallback 回调函数
     */
    void send(NetworkMessage message, NetworkMessageCallback messageCallback);

    /**
     * 设置回调函数
     * @param callback
     */
    void setCallback(NetworkCallback callback);


}
